package com.lp.syn_test;

import java.util.concurrent.atomic.AtomicInteger;

public class SychronizedStaticMethodTest implements Runnable{
    private static int i = 0;//共享资源
    public static void main(String[] args) throws InterruptedException {
        /**
         * 使用synchronized修饰方法
         */
//        SychronizedStaticMethodTest st = new SychronizedStaticMethodTest();
//        Thread t1 = new Thread(st);
//        Thread t2 = new Thread(st);
//        t1.start();
//        t2.start();
//        //join()的作用让调用该方法的线程在执行完run()方法后，再执行join()方法后面的代码。
//        t1.join();
//        t2.join();
//        System.out.println(i);
        /**
         * synchronized修饰方法实际锁定的类对象，不同的对象仍然能保证线程安全
         */
//        SychronizedStaticMethodTest st1 = new SychronizedStaticMethodTest();
//        SychronizedStaticMethodTest st2 = new SychronizedStaticMethodTest();
//        Thread t1 = new Thread(st1);
//        Thread t2 = new Thread(st2);
//        t1.start();
//        t2.start();
//        //join()的作用让调用该方法的线程在执行完run()方法后，再执行join()方法后面的代码。
//        t1.join();
//        t2.join();
//        System.out.println(i);
    }

    /**
     * synchronized 修饰实例方法
     */
    public synchronized static void increase(){
        i++;
    }

    @Override
    public void run() {
        for(int j=0;j<1000000;j++){
            increase();
        }
    }
}
